package co.com.inversiones.xyz.ltda.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.com.inversiones.xyz.ltda.dao.EncuestaDao;
import co.com.inversiones.xyz.ltda.dto.Encuesta;
import co.com.inversiones.xyz.ltda.dto.ResultadoEncuesta;
import co.com.inversiones.xyz.ltda.exception.DaoException;

public class EncuestaDaoImpl extends HibernateDaoSupport implements EncuestaDao {

	/**
	 * Metodo para insertar una nueva encuesta en la base de datos
	 * 
	 * @param encuesta
	 * @throws DaoException
	 */

	@Override
	public void guardarEncuesta(Encuesta encuesta) throws DaoException {

		Session session = null;

		try {
			session = getSession();

			getHibernateTemplate().save(encuesta);

		} catch (HibernateException e) {
			throw new DaoException(e);
		}

	}

	/**
	 * Metodo para consultar los resultados de las encuestas.
	 * 
	 * @return Resultados de las encuesta diligenciadas por los clientes.
	 * @throws DaoException
	 */
	@SuppressWarnings("unchecked")
	@Override
	public ResultadoEncuesta resultadosEncuesta() throws DaoException {

		ResultadoEncuesta resultado = new ResultadoEncuesta();
		List<Encuesta> encuestas = new ArrayList<>();
		int resuletas = 0;
		int volvera = 0;
		Session sesion = null;
		try {
			sesion = getSession();

			encuestas = sesion.createCriteria(Encuesta.class).list();

		} catch (HibernateException e) {
			throw new DaoException("Error consultado las encuestas", e);
		}
		resultado.setNumeroEncuestas(encuestas.size() - 1);
		for (int i = 0; i < encuestas.size(); i++) {
			if (encuestas.get(i).getSolucionado().equals("si")) {
				resuletas++;

			}
			if (encuestas.get(i).getVolvera().equals("si")) {
				volvera++;
			}
		}

		resultado.setNumeroResueltas(resuletas);
		resultado.setNumeroVolveran(volvera);

		return resultado;
	}

}
